package router

import (
	"ExchangeApp/controllers"
	"ExchangeApp/middlewares"
	"github.com/gin-contrib/cors"
	"github.com/gin-gonic/gin"
	"time"
)

// SetupRouter 路由配置函数
// @Summary 初始化路由
// @Description 创建并配置Gin框架的路由引擎，定义API端点和中间件
// @Tags 路由配置
// @Return *gin.Engine 路由引擎实例
func SetupRouter() *gin.Engine {
	// 创建默认的Gin路由引擎
	r := gin.Default()

	// 配置CORS中间件，允许跨域访问
	r.Use(cors.New(cors.Config{
		// 允许访问的源（域名列表）
		AllowOrigins: []string{"https://127.0.0.1:80"},
		// 允许的HTTP方法列表
		AllowMethods: []string{"GET", "POST", "PUT", "OPTIONS", "PATCH"},
		// 允许请求携带的HTTP头
		AllowHeaders: []string{"Origin", "Content-Length", "Content-Type", "Authorization"},
		// 允许客户端读取的响应头
		ExposeHeaders: []string{"Content-Length"},
		// 是否允许携带Cookie等凭证信息
		AllowCredentials: true,
		// 预检请求的缓存时间（12小时）
		MaxAge: 12 * time.Hour,
	}))

	// 认证路由组 - 无需JWT验证的公开端点
	auth := r.Group("/api/auth")
	{
		// 用户登录接口
		auth.POST("/login", controllers.Login)
		// 用户注册接口
		auth.POST("/register", controllers.Register)
	}

	// API路由组
	api := r.Group("/api")
	// 公开路由：获取汇率信息（无需认证）
	api.GET("/exchangeRates", controllers.GetExchangeRates)
	// 以下路由需要JWT认证
	api.Use(middlewares.AuthMiddleware())
	{
		// 受保护路由：创建汇率（需要认证）
		api.POST("/exchangeRates", controllers.CreateExchangeRate)

		// 文章相关路由（需要认证）
		api.POST("/articles", controllers.CreateArticle)  // 创建文章
		api.GET("/articles", controllers.GetArticles)     // 获取文章列表
		api.GET("/articles/:id", controllers.GetArticles) // 获取单篇文章

		// 文章点赞相关路由（需要认证）
		api.POST("/articles/:id/like", controllers.LikeArticle)    // 点赞文章
		api.GET("/articles/:id/like", controllers.GetArticleLikes) // 获取文章点赞数
	}

	// 返回配置好的路由引擎
	return r
}
